<?php
namespace Admin\Model;

class CategoryModel extends CommonModel{
	protected $fields = array('id','cname','parent_id','isrec');
	protected $_validate = array(
		array('cname','require','分类名称必须填写'),
		);

    //获取某个分类的子分类
    public function getChildren($id){
        //先获取所有的分类信息
        $data=$this->select();
       // dump($id);die;
        //对获取的信息进去格式化
        $list=$this->getTree($data,$id,1,false);//为false，查询单一数据,清除缓存
  // dump($list);die;

        foreach ($list as $key=>$value){
            $tree[]=$value['id'];
        }
        return $tree;
    }


	//获得格式化的数信息
	public function getCateTree($id=0){
		$data=$this->select();
		//dump($data);die;
		//对获取的信息进行格式化
		$list =$this-> getTree($data,$id);
		//dump($list);die;
		return $list;
	}

	//格式化分类信息  无限极分类
	public function getTree($data,$id=0,$lev=1,$iscache=true){//为true查询所有数据
		static $list = array();
        //根据参数决定是否需要重置
        if(!$iscache){
            $list=array();
        }
		foreach($data as $key=>$value){
			if($value['parent_id']==$id){
				$value['lev'] = $lev;
				$list[]=$value;
				//使用递归方法获取分类下的子分类
				$this->getTree($data,$value['id'],$lev+1);
			}
		}
			return $list;
			//dump($list);die;
	}

	//删除分类
	public function dels($id){
		//如果删除的分类下有子类不允许删除
		$result = $this->where('parent_id='.$id)->find();
		if($result){
			return false;
		}
		return $this->where('id='.$id)->delete();
	}

	//修改
	public function update($data){
		$tree = $this->getCateTree($data['id']);
		$tree[]=array('id'=>$data['id']);
		//如果提交的parent_id值等于自己及子分类的某个ID直接不允许修改
		foreach ($data as $key=>$value){
			if($data['parent_id']==$value['id']){
				$this->error='不能设置子分类为父分类';
				return false;
			}
		}
		return $this->save($data);
	}


    //获取楼层信息 包括楼层的分类信息以及商品信息
    public function getFloor(){     //--home/index
        //1、获取所有的顶级分类
        $data=$this->where('parent_id=0')->select();
//        dump($data);die;
        //根据顶级分类的标识获取二级分类及推荐的二级分类信息
        foreach($data as $key => $value){
            //获取二级分类
            $data[$key]['son']=$this->where('parent_id='.$value['id'])->select();
            //获取推荐的二级分类信息
            $data[$key]['recson']=$this->where('isrec=1 and parent_id='.$value['id'])->select();
            //根据每一个楼层推荐的二级分类信息获取对应的商品数据
            foreach($data[$key]['recson'] as $k=>$v){
                //$v代表的就是每一个推荐分类信息
                $data[$key]['recson'][$k]['goods']=$this->getGoodsByCateId($v['id']);
                //dump($data);die;
            }
        }
        return $data;
    }

    //根据分类ID标识获取对应的商品信息
    public function getGoodsByCateId($cate_id,$limit=8){
        //1、获取当前分类下面子分类信息
        $children = $this->getChildren($cate_id);
        //2、将当前分类的标识追加到对应的子分类中
        $children[]=$cate_id;
        //3、将$children格式化为字符串的格式目的就是为了使用MySQL中的in语法
        $children=implode(',',$children);
        //4、通过目前的分类信息获取商品数据	--没有被删除的，销售	分类ID在子类中 ，
        $goods=D('Goods')->where(" isdel=1 and is_sale=1 and cate_id in ($children)")->limit($limit)->order("id desc")->select();
        //dump($goods);die;
        return $goods;
    }
	
}